import { RequestHandler } from "express";
import { CrowllerController, LoginController } from "../controller";

// use 装饰器，该装饰器是一个工厂函数，传入的参数是 middleware
export function use(middleware: RequestHandler) {
  // 返回一个装饰器
  return function (target: CrowllerController | LoginController, key: string) {
    // 处理一个方法上使用多个装饰器的情况
    const originMiddlewares =
      Reflect.getMetadata("middlewares", target, key) || [];
    originMiddlewares.push(middleware);
    // 在 target 的 key 上，存储一个名为 'middleware' 值为 middleware 的元数据
    Reflect.defineMetadata("middlewares", originMiddlewares, target, key);
  };
}
